from collections import deque
n = int(input())
a = [0] + list(map(int, input().split()))
b = [0] + list(map(int, input().split()))
def find_path_to_zero():
paths = {n: (n, n)}
queue = deque([n])
curr_min_height = n + 1
while queue:
height = queue.popleft()
if height <= a[height]:
paths[0] = (height, 0)
path = []
curr_node = 0
count = 0
while curr_node != n:
path.append(paths[curr_node][1])
curr_node = paths[curr_node][0]
count += 1
return count, path[::-1]
for node in range(curr_min_height - 1, height - a[height] - 1, -1):
new_height = node + b[node]
if new_height not in paths:
paths[new_height] = (height, node)
queue.append(new_height)
curr_min_height = min(curr_min_height, height - a[height])
return -1, []
num_steps, path = find_path_to_zero()
print(num_steps)
print(*path)
221. Maximal Square | 1200. Minimum Absolute Difference |
1619B - Squares and Cubes | 1619A - Square String |
1629B - GCD Arrays | 1629A - Download More RAM |
1629C - Meximum Array | 1629D - Peculiar Movie Preferences |
1629E - Grid Xor | 1629F1 - Game on Sum (Easy Version) |
2148. Count Elements With Strictly Smaller and Greater Elements | 2149. Rearrange Array Elements by Sign |
2150. Find All Lonely Numbers in the Array | 2151. Maximum Good People Based on Statements |
2144. Minimum Cost of Buying Candies With Discount | Non empty subsets |
1630A - And Matching | 1630B - Range and Partition |
1630C - Paint the Middle | 1630D - Flipping Range |
1328A - Divisibility Problem | 339A - Helpful Maths |
4A - Watermelon | 476A - Dreamoon and Stairs |
1409A - Yet Another Two Integers Problem | 977A - Wrong Subtraction |
263A - Beautiful Matrix | 180C - Letter |
151A - Soft Drinking | 1352A - Sum of Round Numbers |